<?php
//初始分有为2个部分，1公共部分，专属部分
//专属部分：1 WB端，2指令行端，3 API调用
class Z{
	static function init(){
		//框架版本
		define('VERSION','1.0');
		
		$GLOBALS['start_time'] = microtime(TRUE);//项目开始时间
		//项目初始化函数
		if ( function_exists('_start_') )
			_start_();
		
		
		if(!defined('BASE_DIR'))
			exit('BASE_DIR is null');
		
		if(!is_dir(BASE_DIR))
			exit('BASE_DIR not dir');
		
		defined('ACCESS_TYPE') or define('ACCESS_TYPE', 'USER');
		//路径中的返斜杠:/
		define('DS', DIRECTORY_SEPARATOR);
		defined('PARA_APP_ID') or define('PARA_APP_ID', 'appid');
		defined('PARA_CODE') or define('PARA_CODE', 'code');
		//===========控制器==================
		defined('C_EXT') or define('C_EXT', '.ctrl.php');//文件的后缀
		defined('C_DIR_NAME') or define('C_DIR_NAME', 'ctrl');//文件夹名
		defined('C_CLASS') or define('C_CLASS', 'Ctrl');//文件的类名后缀
		//===========控制器==================
		//===========模型层==================
		defined('M_EXT') or define('M_EXT', '.model.php');
		defined('M_DIR_NAME') or define('M_DIR_NAME', 'model');
		defined('M_CLASS') or define('M_CLASS', 'Model');
		//===========模型层==================
		//===========类库==================
		defined('LIB_DIR_NAME') or define('LIB_DIR_NAME','lib');
		defined('LIB_EXT') or define('LIB_EXT','.lib.php');
		defined('LIB_CLASS') or define('LIB_CLASS','Lib');
		//===========类库==================
		//===========memcache==================
		defined('MEM_CACHE') or define('MEM_CACHE','OFF');
		defined('MEM_CACHE_IP') or define('MEM_CACHE_IP','127.0.0.1');
		defined('MEM_CACHE_PORT') or define('MEM_CACHE_PORT',11211);
		//===========memcache==================
		defined('MYSQL_DEBUG') or define('MYSQL_DEBUG',1);
		//加载语言包
		defined('LANG') or define('LANG','CN');
		//调试模式,0:关闭,1:全开，2半开
		defined('DEBUG') or define('DEBUG',1);
		if(DEBUG){
			ini_set('display_errors', 1);
			if(1 == DEBUG){
				error_reporting(E_ALL);
			}else{
				error_reporting(E_ERROR);
			}
		}else{
			ini_set('display_errors', 0);
			error_reporting(0);
		}
		//默认30秒为超时
		defined('TIME_LIMIT') or define('TIME_LIMIT',30);
		set_time_limit(TIME_LIMIT);
		//数据库字符集
		define('DB_CHARSET', "utf8");
		//时区
		defined('TIME_ZONE') or define('TIME_ZONE', 'Asia/shanghai' ) ;
		ini_set("date.timezone",TIME_ZONE);
		//定义默认的  控制器名称  与  事件名称
		defined('DEF_CTRL') or define('DEF_CTRL','index');
		defined('DEF_AC') or define('DEF_AC','index');
		//公共类与公共配置
		set_include_path(get_include_path() . PATH_SEPARATOR . BASE_DIR .DS.LIB_DIR_NAME);
		set_include_path(get_include_path() . PATH_SEPARATOR . BASE_DIR .DS. 'config');
		
		include_once 'db.inc.php';//数据库配置
		include_once 'functions.php';//公共函数
		// 设定错误和异常处理
		set_error_handler(array('ExceptionFrameLib','appError'));
		set_exception_handler(array('ExceptionFrameLib','appException'));
		spl_autoload_register('__autoload');//自动加载类
		//===========内存信息==================
		define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
		if(MEMORY_LIMIT_ON) $GLOBALS['start_use_mems'] = memory_get_usage();
		$memorylimit = @ini_get('memory_limit');
		if($memorylimit && return_bytes($memorylimit) < 33554432 ) {
			ini_set('memory_limit', '128m');
		}
		return array('err'=>1,'msg'=>'','data'=>'');
		//===========内存信息==================
	}
	//指令行方式运行
	static function runConsoleApp(){
		defined('PLUGIN') or define(  'PLUGIN',BASE_DIR . 'plugin/');
		
		//是否为指令行模式
		define('IS_SHELL', '1');
		defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
		
		if(defined('APP_PATH'))
			set_include_path(get_include_path() . PATH_SEPARATOR . APP_PATH .'shell');
		
		set_include_path(get_include_path() . PATH_SEPARATOR . BASE_DIR .'shell');
		
		$Cmd = new CmdlineLib();
		$Cmd->addCommands(BASE_DIR ."shell/" );
		$Cmd->runCommand();
	}
	//web方式进行访问
	static function runWebApp(){
		//访问日志
		defined('ACCESS_LOG') or define('ACCESS_LOG','DB');
		//错误日志
		defined('ERROR_LOG') or define('ERROR_LOG','DB');
		//常量检查
		self::checkWebConst();
		//****************session***************************
		defined('SESS_KEY_NAME') or define('SESS_KEY_NAME','userInfo');
		defined('IS_SESS') or define('IS_SESS','1');
		defined('SESS_TYPE') or define('SESS_TYPE','FILE');
		//****************session***************************
		//控制器 参数名称
		defined('PARA_CTRL') or define('PARA_CTRL', 'ctrl');
		//控制器 方法参数名称
		defined('PARA_AC') or define('PARA_AC', 'ac');
		//开启URL地址重写-此功能还没有编写
		defined('URL_REWRITE_ON') or define('URL_REWRITE_ON', 0);
		
		include "interface.php";
		
		set_include_path(get_include_path() .PATH_SEPARATOR. BASE_DIR .DS .C_DIR_NAME);
		set_include_path(get_include_path() .PATH_SEPARATOR. BASE_DIR . DS .M_DIR_NAME);
		//图片上传路径
		//defined('IMG_UPLOAD') or define('IMG_UPLOAD', APP_PATH . 'upload/');
		// 获取请求地址：/project2/point/index.php
		$script_path = _get_script_url();
		$script_file = $script_path . "?" .  $_SERVER['QUERY_STRING'];
		$ctrl = substr($_SERVER['QUERY_STRING'],0,stripos($_SERVER['QUERY_STRING'],'ac') + 3);
		//请求文件的名称
		define('SCRIPT_NAME',$script_file);
		//请求文件+控制器参数值
		define('SCRIPT_CTRL',$script_path . "?" .$ctrl );
		//初始化SESSION
// 		$Session = get_instance_of('SessionLib');
		$Dispath = get_instance_of('DispathLib');
		$Dispath->authDispath();//路由验证
		$Dispath->action();
// 		global $db_sql_cnt;
// 		foreach($db_sql_cnt as $k=>$v){
// 			echo $v."<Br/>";
// 		}
		if ( function_exists('_tp_end') )
			_tp_end();
	}
	static function checkWebConst(){//初始化的常量值，必埴项检查
		if(!defined('DEF_DB_CONN'))stop('常量未定义：DEF_DB_CONN','C_N_D');
		if(!defined('DOMAIN'))stop('常量未定义：DOMAIN','C_N_D');
	}
}

